/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.brasilerp.vendas;

import br.com.brasilerp.pessoa.Cliente;
import br.com.brasilerp.produto.Produto;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *
 * @author Renato
 */
public class OrdemVendaImpl implements OrdemVenda{

    private List <ItemVenda> itensVenda;
    private Map <Produto,ItemVenda> mapProduto;
    private Cliente pessoa;
    
    OrdemVendaImpl(){
        this.itensVenda = new ArrayList<ItemVenda>();
        this.mapProduto = new HashMap<Produto,ItemVenda>();
    }
    
    @Override
    public void setCliente(Cliente pessoa){
        this.pessoa = pessoa;
    }
    
    @Override
    public Cliente getCliente() {
        return pessoa;
    }
    
    

    @Override
    public List<ItemVenda> getProdutos() {
        return this.itensVenda;                
    }
    
    
    void adicionarProduto(Produto produto, long quantidade){       
        ItemVenda itemVenda = mapProduto.get(produto);
        if(itemVenda == null){
            itemVenda = new ItemVenda();
            itemVenda.setProduto(produto);
            this.itensVenda.add(itemVenda);
            this.mapProduto.put(produto, itemVenda);        
        }
        
        long qtd = itemVenda.getQuantidade();
        qtd += quantidade;        
        
        itemVenda.setQuantidade(qtd);
        
    }

    void removerProduto(Produto produto, long qtd) throws VendaException {
        ItemVenda itemVenda = this.mapProduto.get(produto);
        if(itemVenda.getQuantidade()>qtd){
            long quantidade = itemVenda.getQuantidade() - qtd;
            itemVenda.setQuantidade(quantidade);            
        }else if(itemVenda.getQuantidade() == qtd){
            itensVenda.remove(itemVenda);
            mapProduto.remove(produto);
        }else{
            throw new VendaException("Quantidade inexistente do produto");
        }
    }
    
}
